package com.proyecto.track.service;

import java.util.List;

import com.proyecto.track.action.dto.ProyectoDTO;
import com.proyecto.track.action.dto.TareaDTO;
import com.proyecto.track.action.dto.UsuarioDTO;
import com.proyecto.track.bo.Comentario;
import com.proyecto.track.bo.EstadoProyecto;
import com.proyecto.track.bo.EstadoTarea;
import com.proyecto.track.bo.Proyecto;
import com.proyecto.track.bo.Rol;
import com.proyecto.track.bo.Tarea;
import com.proyecto.track.bo.TipoTarea;
import com.proyecto.track.bo.Usuario;
import com.proyecto.track.utils.NoHayHorasDisponiblesException;

/**
 * La Interfaz del service de proyectos.
 */
public interface IProyectoService {
	
	public List<Rol> getAllRoles();
	
	public Rol recuperarRol(Long idRol);
	
	public  List<UsuarioDTO> usuarioEmpiezaConDTO(String nombre);

	public Usuario recuperarUsuario(Long idUsuario);

	public Long crearUsuario(Usuario usuario);

	public void actualizarUsuario(Usuario usuario);

	public void borrarUsuario(Long idUsuario);

	public List<Usuario> getAllUsuarios();

	public Usuario recuperarUsuarioPorUsername(String nombreUsuario);

	public List<Proyecto> listarProyectos();

	public Proyecto recuperarProyecto(Long idProyecto);

	public List<EstadoProyecto> listarEstadosProyecto();

	public Long crearProyecto(Proyecto proyecto);
	
	public EstadoProyecto recuperarEstadoProyecto(Long idEstado);

	public void actualizarProyecto(Proyecto proyecto);

	public void borrarProyecto(Long idProyecto);

	public List<ProyectoDTO> listarProyectosDTO();

	public boolean existeUsuarioConNombre(String nombre);

	public List<TareaDTO> listarTareasDTO(Long idProyecto);

	public Tarea recuperarTarea(Long idTarea);

	public List<EstadoTarea> getAllEstadosTarea();

	public List<TipoTarea> getAllTiposTarea();

	public Long crearTarea(Tarea tarea) throws NoHayHorasDisponiblesException;

	public TipoTarea recuperarTipoTarea(Long idTipoTarea);

	public void actualizarTarea(Tarea tarea) throws NoHayHorasDisponiblesException;

	public void borrarTarea(Long idTarea);

	public Long guardarComentario(Comentario comentario);
	
}